home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / SourceCode / AdobeExamples / NX_Scroll / iparser.c < prev    next >
Text File  |  1992-12-19  |  3KB  |  130 lines

  1.  
  2. /*
  3.  * (a)  (C) 1990 by Adobe Systems Incorporated. All rights reserved.
  4.  *
  5.  * (b)  If this Sample Code is distributed as part of the Display PostScript
  6.  *    System Software Development Kit from Adobe Systems Incorporated,
  7.  *    then this copy is designated as Development Software and its use is
  8.  *    subject to the terms of the License Agreement attached to such Kit.
  9.  *
  10.  * (c)  If this Sample Code is distributed independently, then the following
  11.  *    terms apply:
  12.  *
  13.  * (d)  This file may be freely copied and redistributed as long as:
  14.  *    1) Parts (a), (d), (e) and (f) continue to be included in the file,
  15.  *    2) If the file has been modified in any way, a notice of such
  16.  *      modification is conspicuously indicated.
  17.  *
  18.  * (e)  PostScript, Display PostScript, and Adobe are registered trademarks of
  19.  *    Adobe Systems Incorporated.
  20.  * 
  21.  * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO
  22.  *    CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED
  23.  *    AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED.
  24.  *    ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY
  25.  *    OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO
  26.  *    WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY)
  27.  *    WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY
  28.  *    DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, 
  29.  *    FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT
  30.  *    OF THIRD PARTY RIGHTS.
  31.  */
  32.  
  33. /*
  34.  *    iparser.c
  35.  *
  36.  *
  37.  *    Version:    2.0
  38.  *    Author:    Ken Anderson, Ken Fromm
  39.  *    History:
  40.  *            03-07-91        Added this comment.
  41.  */
  42.  
  43. #import "iinterpreter.h"
  44. #import "iparserhooks.h"
  45. #import "ierror.h"
  46. #import <objc/objc.h>
  47. #import <streams/streams.h>
  48.  
  49. extern int         yylex();
  50.  
  51. static char        *idp;
  52.  
  53. typedef  void (*VoidProc) ();
  54.  
  55. #define  NUM_PROCS    42
  56. VoidProc procs[128] = {
  57. /* 0 */     i_int, i_real,  i_string, i_literal, i_name, i_array, i_f, i_s,
  58. /* 8 */    i_clip, i_T, i_A, i_W, i_AW, i_m, i_lineto, i_L,
  59. /* 16 */    i_r, i_R, i_l, i_x, i_y, i_X, i_Y, i_c,
  60. /* 24 */    i_cp, i_w, i_g, i_j, i_d, i_miter, i_cap, i_RGB,
  61. /* 32 */    i_F, i_FF, i_DF, i_MF, i_IMASK, i_IMAGE, i_BPAGE, i_EPAGE,
  62. /* 40 */    i_REMAP, i_RECODE
  63. };
  64.  
  65.  
  66. char igetc()
  67. {
  68.     return *idp++;
  69. }
  70.  
  71. /*
  72.  *    Initializes the parsing interpreter and begins the process.
  73.  */
  74. BOOL iparse(char **dataptr)
  75. {    
  76.     BOOL     error = NO, skip = YES, done = NO;
  77.  
  78.     int        token;
  79.     
  80.     idp = *dataptr;
  81.     iinitialize();
  82.  
  83.     while (*idp != 0  && !done)
  84.     {
  85.         if (*idp == '\n')
  86.             idp++;
  87.         else if (!strncmp(idp, "%%", 2))
  88.         {
  89.             idp += 2;
  90.             if (!strncmp(idp, "Trailer", 7))
  91.                 done = YES;
  92.             else if (!strncmp(idp, "EndPageSetup", 12))
  93.                 skip = NO;
  94.             else if (!strncmp(idp, "PageTrailer", 11))
  95.                 skip = YES;
  96.  
  97.             idp = strchr(idp,'\n'); idp++;
  98.         }
  99.         else if (skip)
  100.         {
  101.             idp = strchr(idp,'\n'); idp++;
  102.         }
  103.         else
  104.         {
  105.             token = yylex();
  106.             while (token && !error)
  107.             {
  108.                 if (token <= NUM_PROCS)
  109.                 {
  110.                     (*procs[token-1]) ();
  111.                     error = iiferror();
  112.                 }
  113.                 else
  114.                     ierrorlog("Unrecognized token", &error);
  115.  
  116.                 if (!error)
  117.                     token = yylex();
  118.                 else
  119.                     ierrordisplay(token);
  120.             }
  121.         }
  122.     }
  123.     
  124.     *dataptr = idp;
  125.  
  126.     return error;
  127. }
  128.  
  129.  
  130.